# RUN: llvm-mc -arch=amdgcn -mcpu=tonga -disassemble -show-encoding < %s | FileCheck %s -check-prefix=VI

# VI: flat_load_dword v1, v[3:4] ; encoding: [0x00,0x00,0x50,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x50 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dword v1, v[3:4] glc ; encoding: [0x00,0x00,0x51,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x51 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dword v1, v[3:4] glc slc ; encoding: [0x00,0x00,0x53,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x53 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dword v1, v[3:4] slc ; encoding: [0x00,0x00,0x52,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x52 0xdc 0x03 0x00 0x00 0x01

# VI: flat_atomic_add v1, v[3:4], v5 glc slc ; encoding: [0x00,0x00,0x0b,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x0b 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_add v[3:4], v5 slc ; encoding: [0x00,0x00,0x0a,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x0a 0xdd 0x03 0x05 0x00 0x00

# VI: flat_load_ubyte v1, v[3:4] ; encoding: [0x00,0x00,0x40,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x40 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_sbyte v1, v[3:4] ; encoding: [0x00,0x00,0x44,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x44 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_ushort v1, v[3:4] ; encoding: [0x00,0x00,0x48,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x48 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_sshort v1, v[3:4] ; encoding: [0x00,0x00,0x4c,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x4c 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dword v1, v[3:4] ; encoding: [0x00,0x00,0x50,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x50 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dwordx2 v[1:2], v[3:4] ; encoding: [0x00,0x00,0x54,0xdc,0x03,0x00,0x00,0x01]
0x00 0x00 0x54 0xdc 0x03 0x00 0x00 0x01

# VI: flat_load_dwordx4 v[5:8], v[3:4] ; encoding: [0x00,0x00,0x5c,0xdc,0x03,0x00,0x00,0x05]
0x00 0x00 0x5c 0xdc 0x03 0x00 0x00 0x05

# VI: flat_load_dwordx3 v[5:7], v[3:4] ; encoding: [0x00,0x00,0x58,0xdc,0x03,0x00,0x00,0x05]
0x00 0x00 0x58 0xdc 0x03 0x00 0x00 0x05

# VI: flat_store_dwordx4 v[3:4], v[5:8] ; encoding: [0x00,0x00,0x7c,0xdc,0x03,0x05,0x00,0x00]
0x00 0x00 0x7c 0xdc 0x03 0x05 0x00 0x00

# VI: flat_store_dwordx3 v[3:4], v[5:7] ; encoding: [0x00,0x00,0x78,0xdc,0x03,0x05,0x00,0x00]
0x00 0x00 0x78 0xdc 0x03 0x05 0x00 0x00

# VI: flat_atomic_swap v[3:4], v5 ; encoding: [0x00,0x00,0x00,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x00 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_swap v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x01,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x01 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_cmpswap v[3:4], v[5:6] ; encoding: [0x00,0x00,0x04,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x04 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_cmpswap v1, v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x05,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x05 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_add v[3:4], v5 ; encoding: [0x00,0x00,0x08,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x08 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_add v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x09,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x09 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_sub v[3:4], v5 ; encoding: [0x00,0x00,0x0c,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x0c 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_sub v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x0d,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x0d 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_smin v[3:4], v5 ; encoding: [0x00,0x00,0x10,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x10 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_smin v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x11,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x11 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_umin v[3:4], v5 ; encoding: [0x00,0x00,0x14,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x14 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_umin v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x15,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x15 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_smax v[3:4], v5 ; encoding: [0x00,0x00,0x18,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x18 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_smax v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x19,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x19 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_umax v[3:4], v5 ; encoding: [0x00,0x00,0x1c,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x1c 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_umax v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x1d,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x1d 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_and v[3:4], v5 ; encoding: [0x00,0x00,0x20,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x20 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_and v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x21,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x21 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_or v[3:4], v5 ; encoding: [0x00,0x00,0x24,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x24 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_or v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x25,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x25 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_xor v[3:4], v5 ; encoding: [0x00,0x00,0x28,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x28 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_xor v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x29,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x29 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_inc v[3:4], v5 ; encoding: [0x00,0x00,0x2c,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x2c 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_inc v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x2d,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x2d 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_dec v[3:4], v5 ; encoding: [0x00,0x00,0x30,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x30 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_dec v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x31,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x31 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_swap_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x80,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x80 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_swap_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x81,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x81 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_cmpswap_x2 v[3:4], v[5:8] ; encoding: [0x00,0x00,0x84,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x84 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_cmpswap_x2 v[1:2], v[3:4], v[5:8] glc ; encoding: [0x00,0x00,0x85,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x85 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_add_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x88,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x88 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_add_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x89,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x89 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_sub_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x8c,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x8c 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_sub_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x8d,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x8d 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_smin_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x90,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x90 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_smin_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x91,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x91 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_umin_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x94,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x94 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_umin_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x95,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x95 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_smax_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x98,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x98 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_smax_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x99,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x99 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_umax_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0x9c,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0x9c 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_umax_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0x9d,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0x9d 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_and_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0xa0,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0xa0 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_and_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0xa1,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0xa1 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_or_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0xa4,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0xa4 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_or_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0xa5,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0xa5 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_xor_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0xa8,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0xa8 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_xor_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0xa9,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0xa9 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_inc_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0xac,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0xac 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_inc_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0xad,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0xad 0xdd 0x03 0x05 0x00 0x01

# VI: flat_atomic_dec_x2 v[3:4], v[5:6] ; encoding: [0x00,0x00,0xb0,0xdd,0x03,0x05,0x00,0x00]
0x00 0x00 0xb0 0xdd 0x03 0x05 0x00 0x00

# VI: flat_atomic_dec_x2 v[1:2], v[3:4], v[5:6] glc ; encoding: [0x00,0x00,0xb1,0xdd,0x03,0x05,0x00,0x01]
0x00 0x00 0xb1 0xdd 0x03 0x05 0x00 0x01
